package com.emn.fil.zoualk11;

import java.util.ArrayList;

import com.emn.fil.iapoker.dto.Decision;
import com.emn.fil.iapoker.dto.StatusPartie;
import com.emn.fil.iapoker.dto.carte.Carte;
import com.emn.fil.iapoker.dto.carte.HandValueType;
import com.emn.fil.iapoker.dto.carte.Main;
import com.emn.fil.iapoker.dto.carte.Signe;
import com.emn.fil.iapoker.dto.carte.Tapis;
import com.emn.fil.iapoker.dto.publik.DecisionPublic;
import com.emn.fil.iapoker.dto.publik.ResumePartie;
import com.emn.fil.iapoker.ia.IAPoker;
import com.emn.fil.iapoker.utils.ComparateurMain;

public class Joueur implements IAPoker {

	
	private ArrayList<Signe> listeBonSigne;
	
	public Joueur() {

		listeBonSigne = new ArrayList<Signe>();
		
		listeBonSigne.add(Signe.AS);
		listeBonSigne.add(Signe.ROI);
		listeBonSigne.add(Signe.DAME);
		listeBonSigne.add(Signe.VALET);
		
	}

	public DecisionPublic getDecision(ResumePartie resumePartie) {
		
		Tapis tapis = resumePartie.getTapis();
		
		StatusPartie statusPartie = resumePartie.getStatusPartie();
		
		Main main = resumePartie.getMain();
		
		Carte[] carteTapis = tapis.getCartes();
		
		Carte[] cartes = new Carte[7];
				
		for(int i = 0;i<5;i++) {
			cartes[i] = carteTapis[i];
		}

		cartes[5] = main.getCarte1();
		cartes[6] = main.getCarte2();
		
		ComparateurMain comparateur = new ComparateurMain(cartes);
		
		int valueComparateur = comparateur.getValue();
		
		if(statusPartie == StatusPartie.PRE_FLOP) {
			
			if(resumePartie.getMyDecision() != null && resumePartie.getMyDecision() == Decision.RAISE)
				return new DecisionPublic(Decision.CALL);
			
			else if(comparateur.getType() == HandValueType.ONE_PAIR) {
				
				if(main.getCarte1().getRank() > 9) {
					return new DecisionPublic(Decision.RAISE, 3*resumePartie.getGrosseBlinde());
				}
				else if(main.getCarte1().getRank() > 5) {
					return new DecisionPublic(Decision.RAISE, resumePartie.getGrosseBlinde());
				}
				
			}
			
			else if(listeBonSigne.contains(main.getCarte1().getRank()) && listeBonSigne.contains(main.getCarte1().getRank())) {
				
				if(main.getCarte1().getSuit() == main.getCarte2().getSuit()) {
					return new DecisionPublic(Decision.RAISE, 2*resumePartie.getGrosseBlinde());
				}
				else
					return new DecisionPublic(Decision.RAISE, resumePartie.getGrosseBlinde());
				
			}
			
			else if(listeBonSigne.contains(main.getCarte1().getRank()) || listeBonSigne.contains(main.getCarte1().getRank())) {
				
				if(main.getCarte1().getSuit() == main.getCarte2().getSuit()) {
					return new DecisionPublic(Decision.RAISE, resumePartie.getGrosseBlinde());
				}
				else
					return new DecisionPublic(Decision.CALL);
				
			}
			
			else {
				return new DecisionPublic(Decision.CALL);
			}
			
		}
		
		
		if(valueComparateur > 1000000)
			return new DecisionPublic(Decision.RAISE, 5*resumePartie.getGrosseBlinde()*valueComparateur/1000000);
		else if(valueComparateur > 300000)
			return new DecisionPublic(Decision.CALL);
		else
			return new DecisionPublic(Decision.FOLD);
		
	}
}
